package cn.dengta.webapp.risk.vo;

import java.io.Serializable;
import javax.annotation.Nullable;

import cn.dengta.common.model.Messager;
import cn.dengta.webapp.risk.bean.RiskConstants;
import cn.dengta.webapp.risk.bean.RiskLevel;
import cn.dengta.webapp.risk.bean.RiskVideo.CallbackParam;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

@Getter
@Setter
@Accessors(chain = true)
public class SmRiskVO implements Serializable {

	/**
	 * 1100：成功
	 * 1901：QPS 超限
	 * 1902：参数不合法
	 * 1903：服务失败
	 * 9100：余额不足
	 * 9101：无权限操作
	 */
	private int code;

	/** 与code对应 */
	private String message;

	/** 本次请求唯一标识（建议保存） */
	private String requestId;

	/** PASS：正常，建议直接放行  REVIEW：可疑，建议人工审核  REJECT：违规，建议直接拦截 */
	private String riskLevel;

	/** 一级风险标签 */
	private String riskLabel1;

	/** 二级风险标签 */
	private String riskLabel2;

	/** 三级风险标签 */
	private String riskLabel3;

	/** 风险原因 */
	private String riskDescription;

	/** 视频唯一标识，最长 64 位 **/
	private String btId;

	/** 当提交请求中，callbackParam 字段有值时存在 **/
	private CallbackParam callbackParam;

	public boolean hasRisk(@Nullable Integer minPassLevel) {
		if (minPassLevel == null) {
			minPassLevel = RiskConstants.DEFAULT_PASS_LEVEL.level;
		}
		RiskLevel level = RiskLevel.of(riskLevel);
		if (level == RiskLevel.REJECT) {
			return level.level >= minPassLevel;
		}
		return level != null && level.level > minPassLevel;
	}

	public static boolean hasRisk(@Nullable Messager<SmRiskVO> msger, @Nullable Integer minPassLevel) {
		if (msger == null || !msger.isOK()) {
			return false;
		}
		final SmRiskVO vo = msger.data();
		return vo != null && vo.hasRisk(minPassLevel);
	}

}
